/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ClientServerInreraction;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * Класс для загрузки файлов с указанного сервера.
 * @author Иван
 */
public class Download {

    private URL url;
    public String strUrl;
    private int size;//размер загружаемых данных в байтах
    private int downloaded;//размер скачанных данных в байтах
    private final int MAX_SIZE_OF_BUFFER = 1024;//максимальный размер буфера

    public boolean herrr;

    public Download(){

      

    }

    public Download(Boolean b){

       herrr = b;

    }

    public Download(String strUrl)  {//throws MalformedURLException
        this.strUrl = strUrl;
       /// this.url = new URL(strUrl);
        size = -1;
    }

    public int getSize() {
        return size;
    }

    public String getUrl() {
        return url.toString();
    }

    public int getProgress() {
        return 1;
    }

    public String getNameOfFile() {
        String fileName = url.getFile();
        int pos = fileName.lastIndexOf('/') + 1;
        return fileName.substring(pos);
    }

    public void run() throws IOException {
        //обёртки дял входныго и выходного потоков
        BufferedOutputStream outputFile = null;
        BufferedInputStream inputStream = null;

        //соединение с удалённым объектом, расположенным по адресу указанному url
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.connect();

        //полный размер объекта в байтах
        int connectLength = connection.getContentLength();
        if (size == -1) {
            size = connectLength;
        }

        //инициализация выходного потока (в него будет записан загружаемый файл)
        outputFile = new BufferedOutputStream(new FileOutputStream(getNameOfFile()));

        //инициализация входного потока(читается из открытого соединения)
        inputStream = (BufferedInputStream) connection.getInputStream();

        //инициализация буфера, в который будут считываться данные из входного потока
        byte[] bufer = new byte[MAX_SIZE_OF_BUFFER];

        //пока есть, что читать
        while (inputStream.read(bufer) != -1) {
            //запись в выходной поток прочитанных данных
            outputFile.write(bufer);
        }

        if (outputFile != null) {
            //закрытие выходного потока
            outputFile.close();
        }

        if (inputStream != null) {
            //закрытие входного потока
            inputStream.close();
        }

    }
}
